#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
ChromaDB 路径问题验证脚本
验证配置文件中的路径与代码中实际使用的路径是否一致
"""

import asyncio
import os
import sys
import yaml
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root / 'src'))

def load_config():
    """加载配置文件"""
    config_path = project_root / 'config' / 'database.yaml'
    with open(config_path, 'r', encoding='utf-8') as f:
        return yaml.safe_load(f)

async def verify_chromadb_path_issue():
    """验证 ChromaDB 路径配置问题"""
    print("=== ChromaDB 路径问题验证 ===")
    
    # 1. 检查配置文件中的路径
    config = load_config()
    chromadb_config = config.get('databases', {}).get('chromadb', {})
    configured_path = chromadb_config.get('persist_directory', './data/chroma_db')
    print(f"\n1. 配置文件中的路径: {configured_path}")
    
    # 2. 检查代码中的默认路径
    from database.chromadb_client import ChromaDBClient
    
    # 创建客户端实例但不连接
    client = ChromaDBClient(config)
    default_path = client.chromadb_config.get('persist_directory', './data/chroma_db')
    print(f"2. 代码中获取的路径: {default_path}")
    
    # 3. 检查实际存在的目录
    print("\n3. 检查实际存在的目录:")
    
    # 检查配置文件指定的路径
    config_abs_path = (project_root / configured_path.lstrip('./')).resolve()
    print(f"   配置路径 (绝对): {config_abs_path}")
    print(f"   配置路径存在: {config_abs_path.exists()}")
    if config_abs_path.exists():
        subdirs = [d for d in config_abs_path.iterdir() if d.is_dir()]
        print(f"   配置路径子目录数量: {len(subdirs)}")
    
    # 检查代码默认路径
    default_abs_path = (project_root / default_path.lstrip('./')).resolve()
    print(f"   默认路径 (绝对): {default_abs_path}")
    print(f"   默认路径存在: {default_abs_path.exists()}")
    if default_abs_path.exists():
        subdirs = [d for d in default_abs_path.iterdir() if d.is_dir()]
        print(f"   默认路径子目录数量: {len(subdirs)}")
    
    # 4. 检查 data 目录下的所有 chroma 相关目录
    print("\n4. data 目录下的 chroma 相关目录:")
    data_dir = project_root / 'data'
    if data_dir.exists():
        for item in data_dir.iterdir():
            if item.is_dir() and 'chroma' in item.name.lower():
                subdirs = [d for d in item.iterdir() if d.is_dir()]
                print(f"   {item.name}: {len(subdirs)} 个子目录")
    
    # 5. 路径一致性检查
    print("\n5. 路径一致性检查:")
    if configured_path == default_path:
        print("   ✅ 配置文件路径与代码默认路径一致")
    else:
        print("   ❌ 配置文件路径与代码默认路径不一致")
        print(f"      配置文件: {configured_path}")
        print(f"      代码默认: {default_path}")
        print("      这可能导致数据存储在不同位置！")
    
    # 6. 建议的修复方案
    print("\n6. 建议的修复方案:")
    if configured_path != default_path:
        print("   方案1: 修改配置文件，使路径与代码一致")
        print("   方案2: 修改代码，使默认路径与配置一致")
        print("   方案3: 将数据从一个目录迁移到另一个目录")
        
        # 检查哪个目录有更多数据
        config_count = 0
        default_count = 0
        
        if config_abs_path.exists():
            config_count = len([d for d in config_abs_path.iterdir() if d.is_dir()])
        
        if default_abs_path.exists():
            default_count = len([d for d in default_abs_path.iterdir() if d.is_dir()])
        
        print(f"\n   数据分布:")
        print(f"   - 配置路径数据: {config_count} 个集合")
        print(f"   - 默认路径数据: {default_count} 个集合")
        
        if config_count > default_count:
            print("   推荐: 修改代码使用配置文件路径 (配置路径有更多数据)")
        elif default_count > config_count:
            print("   推荐: 修改配置文件使用代码默认路径 (默认路径有更多数据)")
        else:
            print("   推荐: 统一使用配置文件路径")

if __name__ == "__main__":
    asyncio.run(verify_chromadb_path_issue())